package pe.com.bbva.ge.vista.vaadin.ui.registrosolicitud;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;

import pe.com.bbva.ge.domain.configuracion.Posicion;
import pe.com.bbva.ge.domain.configuracion.Transportadora;
import pe.com.bbva.ge.domain.solicitud.Destino;
import pe.com.bbva.ge.domain.solicitud.DetalleCasetera;
import pe.com.bbva.ge.domain.solicitud.DetalleMoneda;
import pe.com.bbva.ge.domain.solicitud.EstadoSolicitud;
import pe.com.bbva.ge.domain.solicitud.Solicitud;
import pe.com.bbva.ge.domain.solicitud.TipoSolicitud;
import pe.com.bbva.ge.negocio.SolicitudNegocio;
import pe.com.bbva.ge.utileria.UtileriaComun;
import pe.com.bbva.ge.vista.vaadin.ui.BaseUI;
import pe.com.bbva.ge.vista.vaadin.ui.VentanaUI;
import pe.com.bbva.ge.vista.vaadin.ui.component.ButtonAccion;
import pe.com.bbva.ge.vista.vaadin.ui.component.ComboBoxGE;
import pe.com.bbva.ge.vista.vaadin.ui.component.ComboBoxPosicion;
import pe.com.bbva.ge.vista.vaadin.ui.component.ComboBoxTipoSolicitud;
import pe.com.bbva.ge.vista.vaadin.ui.utileria.AlertDialog;
import pe.com.bbva.ge.vista.vaadin.ui.utileria.AsignarDestino;
import pe.com.bbva.ge.vista.vaadin.ui.utileria.ComboValueChangeListener;
import pe.com.bbva.ge.vista.vaadin.ui.utileria.UtileriaVista;

import com.cdainfo.vaadin.PopupDateFieldFormat;
import com.cdainfo.vaadin.listener.DateFieldChangedListener;
import com.vaadin.annotations.AutoGenerated;
import com.vaadin.data.Container;
import com.vaadin.data.Item;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.data.util.IndexedContainer;
import com.vaadin.terminal.ThemeResource;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.Embedded;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Table;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;

public class RegistrarSolicitudUI extends VentanaUI implements ClickListener,
		ComboValueChangeListener, DateFieldChangedListener {

	@AutoGenerated
	private VerticalLayout mainLayout;
	@AutoGenerated
	private HorizontalLayout lytBotones;
	@AutoGenerated
	private ButtonAccion btnCancelar;
	@AutoGenerated
	private ButtonAccion btnCrear;
	@AutoGenerated
	private VerticalLayout lytDetalles;
	@AutoGenerated
	private VerticalLayout lytCabecera;
	@AutoGenerated
	private HorizontalLayout lytDestinos;
	@AutoGenerated
	private HorizontalLayout lytDestinoDatos;
	@AutoGenerated
	private Table tblDestinos;
	@AutoGenerated
	private HorizontalLayout lytTransportadora;
	@AutoGenerated
	private Label lblTransportadora;
	@AutoGenerated
	private Label lblEnviadoPor;
	@AutoGenerated
	private HorizontalLayout lytControl3;
	@AutoGenerated
	private Button btnAgregarDestino;
	@AutoGenerated
	private ComboBoxPosicion cmbDestino;
	@AutoGenerated
	private ComboBoxPosicion cmbOrigen;
	@AutoGenerated
	private HorizontalLayout lytControl2;
	@AutoGenerated
	private TextField txtReferencia;
	@AutoGenerated
	private HorizontalLayout lytControl1;
	@AutoGenerated
	private TextField txtCotizacion;
	@AutoGenerated
	private CheckBox chkPatron;
	@AutoGenerated
	private Embedded imgNoProgramado;
	@AutoGenerated
	private PopupDateFieldFormat pdfAtencion;
	@AutoGenerated
	private ComboBoxTipoSolicitud cmbTipoSolicitud;

	private static final long serialVersionUID = 8212050275090633664L;

	private Date fechaAtencion;

	private Container containerDestino;

	private static final String COLUMNA_DESTINO_NOMBRE = "nombre";
	private static final String COLUMNA_DESTINO_TIPO = "tipo";
	private static final String COLUMNA_DESTINO = "entidad";

	private Map<Posicion, RegistrarSolicitudDetalleUI> mapDestinos;
	private Map<Posicion, RegistrarSolicitudRutaCosteoUI> mapDestinoDatos;
	
	private RegistrarSolicitudDetalleUI detalleSolUI;
	
	@Autowired
	private SolicitudNegocio solicitudNegocio;

	public RegistrarSolicitudUI() {
		buildMainLayout();
		setCompositionRoot(mainLayout);
		prompt();
		configurarTabla();
	}

	private void configurarTabla() {
		containerDestino = new IndexedContainer();
		containerDestino.addContainerProperty(COLUMNA_DESTINO_NOMBRE,
				String.class, StringUtils.EMPTY);
		containerDestino.addContainerProperty(COLUMNA_DESTINO_TIPO,
				String.class, StringUtils.EMPTY);
		containerDestino.addContainerProperty(COLUMNA_DESTINO, Posicion.class,
				null);

		tblDestinos.setContainerDataSource(containerDestino);

		tblDestinos.setColumnHeader(COLUMNA_DESTINO_NOMBRE, "Destino");
		tblDestinos.setColumnHeader(COLUMNA_DESTINO_TIPO, "Tipo");

		tblDestinos.setHeight("50px");
		tblDestinos.setSelectable(true);
		tblDestinos.setImmediate(true);
		tblDestinos.setMultiSelect(false);

		tblDestinos.setVisibleColumns(new Object[] { COLUMNA_DESTINO_NOMBRE,
				COLUMNA_DESTINO_TIPO });
	}

	@Override
	public void postConstruccion() {

		cmbOrigen.setImmediate(true);
		cmbOrigen.setNullSelectionAllowed(true);
		listeners();
	}

	private void prompt() {
		cmbTipoSolicitud.setInputPrompt("Tipo de Solicitud");
		pdfAtencion.setInputPrompt("Fecha de Atención");
		txtCotizacion.setInputPrompt("Cotización");
		txtReferencia.setInputPrompt("Referencia");
		cmbOrigen.setInputPrompt("Origen");
		cmbDestino.setInputPrompt("Destino");
		imgNoProgramado.setDescription("No Programado");

	}

	private void listeners() {
		cmbTipoSolicitud.setImmediate(true);
		cmbDestino.setImmediate(true);
		cmbTipoSolicitud.addComboValueChangeListener((ComboValueChangeListener) this);
		cmbDestino.addComboValueChangeListener((ComboValueChangeListener) this);
		pdfAtencion.addListener((DateFieldChangedListener) this);
		btnAgregarDestino.addListener((ClickListener) this);
		btnCrear.addListener((ClickListener) this);
		tblDestinos.addListener(new ValueChangeListener() {
			private static final long serialVersionUID = -489050749408556272L;
			@Override
			public void valueChange(ValueChangeEvent event) {
				if (tblDestinos.getValue() == null) {
					lytDetalles.removeAllComponents();
					return;
				}
				Posicion destino = (Posicion) tblDestinos.getItem(tblDestinos.getValue()).getItemProperty(COLUMNA_DESTINO).getValue();
				//Detalle del destino seleccionado
				RegistrarSolicitudDetalleUI detalleUI;
				if (mapDestinos.containsKey(destino)) {
					detalleUI = mapDestinos.get(destino);
				} else {
					detalleUI = crearPanelDetalleSolicitud(false, destino);
					mapDestinos.put(destino, detalleUI);
				}
				mostrarDetalleSolicitud(detalleUI);
				
				//Datos del destino seleccionado
				RegistrarSolicitudRutaCosteoUI rutaCosteoUI;
				if(mapDestinoDatos.containsKey(destino))
				{
					rutaCosteoUI = mapDestinoDatos.get(destino);
				}else {
					rutaCosteoUI = new RegistrarSolicitudRutaCosteoUI();
					mapDestinoDatos.put(destino, rutaCosteoUI);
				}
				mostrarDestinoRutaDatos(rutaCosteoUI);
			}
		});
	}

	@Override
	public void comboValueChange(ComboBoxGE combo, ValueChangeEvent event) {
		if (cmbTipoSolicitud.equals(combo)){
			TipoSolicitud tipoSolicitud = cmbTipoSolicitud.obtenerTipoSolicitud();
			mostrarDetalle(tipoSolicitud);
		}
		else if (cmbDestino.equals(combo)){
			TipoSolicitud tipoSolicitud = cmbTipoSolicitud.obtenerTipoSolicitud();
			if (tipoSolicitud != null) {
				if( !(TipoSolicitud.CODIGO.SERVICIO_POR_RUTA.equals(tipoSolicitud.getCodigo()) &&TipoSolicitud.CODIGO.PEDIDO_DE_MATERIALES.equals(tipoSolicitud.getCodigo()) &&TipoSolicitud.CODIGO.OTRO_SERVICIO.equals(tipoSolicitud.getCodigo())) ){
					mostrarDetalle(tipoSolicitud);
				}	
			}			
		}
		
	}
	public void validarPrimeraVez(){
		chkPatron.setVisible(false);
		TipoSolicitud tipoSolicitud=cmbTipoSolicitud.obtenerTipoSolicitud();
		Posicion posicionDestino = cmbDestino.obtenerPosicion();
		if(tipoSolicitud!=null && tipoSolicitud.getCodigo().equals(TipoSolicitud.CODIGO.PEDIDO_DE_EFECTIVO_DE_BOVEDA)){
			if(posicionDestino!=null){
				chkPatron.setValue(true);
				chkPatron.setVisible(!solicitudNegocio.primerPedido(tipoSolicitud,posicionDestino));
			}
		}
	}
	
	private void mostrarDetalle(TipoSolicitud tipoSolicitud) {
		//TipoSolicitud tipoSolicitud = cmbTipoSolicitud.obtenerTipoSolicitud();

		boolean flagCotizacion = false;

		boolean flagPorRuta = false;

		BaseUI detalleUI = null;

		if (tipoSolicitud != null) {
			flagCotizacion = TipoSolicitud.CODIGO.IMPORTACION_ME
					.equals(tipoSolicitud.getCodigo())
					|| TipoSolicitud.CODIGO.EXPORTACION_ME.equals(tipoSolicitud
							.getCodigo());

			flagPorRuta = TipoSolicitud.CODIGO.SERVICIO_POR_RUTA
					.equals(tipoSolicitud.getCodigo());

			if (flagPorRuta) {
				mapDestinos = new HashMap<Posicion, RegistrarSolicitudDetalleUI>();
				mapDestinoDatos = new HashMap<Posicion, RegistrarSolicitudRutaCosteoUI>();
			} else if (TipoSolicitud.CODIGO.PEDIDO_DE_MATERIALES
					.equals(tipoSolicitud.getCodigo())) {
				detalleUI = new RegistrarDetalleMaterialUI();
				detalleUI.setImmediate(true);
				detalleUI.setWidth("100.0%");
				detalleUI.setHeight("100.0%");
			} else if (TipoSolicitud.CODIGO.OTRO_SERVICIO.equals(tipoSolicitud
					.getCodigo())) {
				detalleUI = new RegistrarDetalleOtroServicioUI();
				detalleUI.setImmediate(true);
				detalleUI.setWidth("100.0%");
				detalleUI.setHeight("100.0%");
			} else {
				
				Posicion posicionDestino = cmbDestino.obtenerPosicion();
				if(posicionDestino != null)
				{
					boolean flagEnvioDinero = TipoSolicitud.CODIGO.ENVIO_DE_EFECTIVO_A_BOVEDA
							.equals(tipoSolicitud.getCodigo());

					detalleSolUI = crearPanelDetalleSolicitud(flagEnvioDinero, posicionDestino);
					detalleUI = detalleSolUI;
				}
				
			}			

			if(!flagPorRuta)
			{
				containerDestino.removeAllItems();
			}
			
		}

		mostrarDetalleSolicitud(detalleUI);
		
		if(lytDetalles.getComponentCount() > 0)
		{
			fechaAtencion = new Date();
			Calendar c = Calendar.getInstance();
			c.setTime(fechaAtencion);
			c.add(Calendar.DATE, 1);

			fechaAtencion = c.getTime();
		}

		txtCotizacion.setVisible(flagCotizacion);
		btnAgregarDestino.setVisible(flagPorRuta);
		tblDestinos.setVisible(flagPorRuta);
		lytDestinos.setVisible(flagPorRuta);

		pdfAtencion.setValue(fechaAtencion);
		
		validarPrimeraVez();
	}

	private RegistrarSolicitudDetalleUI crearPanelDetalleSolicitud(
			boolean flagEnvioDinero, Posicion posicionDestino) {
		RegistrarSolicitudDetalleUI detalleUI = new RegistrarSolicitudDetalleUI(posicionDestino);
		detalleUI.setMostrarDeteriorados(flagEnvioDinero);
		detalleUI.setImmediate(true);
		detalleUI.setWidth("100.0%");
		detalleUI.setHeight("100.0%");
		return detalleUI;
	}

	private void mostrarDetalleSolicitud(BaseUI detalleUI) {
		lytDetalles.removeAllComponents();
		if (detalleUI != null) {
			lytDetalles.addComponent(detalleUI);
			lytDetalles.setExpandRatio(detalleUI, 1.0f);
		}

	}
	
	private void mostrarDestinoRutaDatos(RegistrarSolicitudRutaCosteoUI rutaCosteoUI) {
		lytDestinoDatos.removeAllComponents();
		if (rutaCosteoUI != null) {
			lytDestinoDatos.addComponent(rutaCosteoUI);
			///lytDetalles.setExpandRatio(rutaCosteoUI, 1.0f);
		}
	}

	@Override
	public void dateFieldValueChange(ValueChangeEvent event) {
		// FIXME evento por mientras
		if (fechaAtencion != null) {
			Date fechaSeleccionada = (Date) pdfAtencion.getValue();

			boolean flagMostrarNoProgramado = (fechaSeleccionada
					.after(fechaAtencion) || fechaSeleccionada
					.before(fechaAtencion));
			imgNoProgramado.setVisible(flagMostrarNoProgramado);
		}

	}

	@Override
	public void buttonClick(ClickEvent event) {
		if (event.getButton().equals(btnAgregarDestino)) {
			buttonClickBtnAgregarDestino();
		} else if (event.getButton().equals(btnCrear)) {
			crearSolicitud();
		}
	}

	private void crearSolicitud() {
		
		Solicitud solicitud = new Solicitud();
		
		TipoSolicitud tipoSolicitud = cmbTipoSolicitud.obtenerTipoSolicitud();		
		// Validando Tipo Solicitud
		if (tipoSolicitud == null) {
			AlertDialog alerta = new AlertDialog("Alerta",
					"Debe seleccionar un tipo de solicitud", "Aceptar", "250");
			getApplication().getMainWindow().getWindow().addWindow(alerta);
			cmbTipoSolicitud.focus();
			return;
		}		
		solicitud.setTipo(tipoSolicitud);
		
		solicitud.setAtencion((Date)pdfAtencion.getValue());
		if(txtCotizacion.isVisible())
		{
			solicitud.setCotizacion(UtileriaVista.obtenerBigDecimal(txtCotizacion));
		}
		
		Boolean noProgramado = imgNoProgramado.isVisible();
		solicitud.setProgramado(noProgramado);
		// Referencia		
		if(noProgramado && txtReferencia.getValue().toString().trim().length() == 0)
		{
			AlertDialog alerta = new AlertDialog("Alerta", "Debe ingresar una referencia", "Aceptar", "250");
			getApplication().getMainWindow().getWindow().addWindow(alerta);
			txtReferencia.focus();
		}				
				
		solicitud.setReferencia(StringUtils.trimToEmpty((String)txtReferencia.getValue()));
		if(chkPatron.isVisible())
		{
			solicitud.setPatron((Boolean) chkPatron.getValue());
		}
		
		Posicion origen = cmbOrigen.obtenerPosicion();
		if (origen == null) {
			AlertDialog alerta = new AlertDialog("Alerta",
					"Debe seleccionar un origen", "Aceptar", "250");
			getApplication().getMainWindow().getWindow().addWindow(alerta);
			cmbOrigen.focus();
			return;
		}
		solicitud.setOrigen(origen);
		
		solicitud.setSolicitante(UtileriaComun.obtenerUsuarioSesion());
		
		solicitud.setTipoOrigen(origen.getTipo());
		solicitud.setTransportadora(solicitudNegocio.obtener(1L, Transportadora.class));//FIXME Temporal
		
		//Set<Destino> destinos = new HashSet<Destino>();		
		solicitud.setDestinos(new ArrayList<Destino>());
		
		Posicion pDestino = cmbDestino.obtenerPosicion();
		
		if(tblDestinos.isVisible())
		{
			//Object valor = tblDestinos.getValue();
			if(containerDestino.size() == 0)
			{
				AlertDialog alerta = new AlertDialog("Alerta",
						"Agregar Destino", "Aceptar", "250");
				getApplication().getMainWindow().getWindow().addWindow(alerta);
				cmbDestino.focus();
				return;
			}
			Collection<?> idsDestinos = containerDestino.getItemIds();
			for (Object idItem : idsDestinos) {
				Item item = containerDestino.getItem(idItem);
				pDestino = (Posicion)item.getItemProperty(COLUMNA_DESTINO).getValue();
				asignarSolicitudDestino(solicitud, pDestino);
			}
		}
		else
		{
			if(pDestino == null)
			{
				AlertDialog alerta = new AlertDialog("Alerta",
						"Seleccionar Destino", "Aceptar", "250");
				getApplication().getMainWindow().getWindow().addWindow(alerta);
				cmbDestino.focus();
				return;
			}
			asignarSolicitudDestino(solicitud, pDestino);
		}
		
		if(TipoSolicitud.CODIGO.PEDIDO_DE_MATERIALES.equals(solicitud.getTipo().getCodigo()) ||
				TipoSolicitud.CODIGO.OTRO_SERVICIO.equals(solicitud.getTipo().getCodigo()))
		{
			AsignarDestino asignarDestino = null;
			if(TipoSolicitud.CODIGO.PEDIDO_DE_MATERIALES.equals(solicitud.getTipo().getCodigo()))
			{
				asignarDestino = (RegistrarDetalleMaterialUI) lytDetalles.getComponent(0);
			}
			else if(TipoSolicitud.CODIGO.OTRO_SERVICIO.equals(solicitud.getTipo().getCodigo()))
			{
				asignarDestino = (RegistrarDetalleOtroServicioUI) lytDetalles.getComponent(0);
			}
			
			if(asignarDestino != null && pDestino != null)
			{
				
				Destino destino = new Destino();
				//destino.setSolicitud(solicitud);
				destino.setDestino(pDestino);
				destino.setTipo(pDestino.getTipo());
				solicitud.addDestino(destino);
				
				asignarDestino.asignarDestino(destino);
			}
		}
				
		
		solicitud.setEstado(new EstadoSolicitud());
		solicitud.setTransportadora(solicitudNegocio.obtener(1L, Transportadora.class));//FIXME Temporal
		//solicitudNegocio.crearSolicitud(solicitud);
		
		RegistrarSolicitudMensajeUI mensajeUI = new RegistrarSolicitudMensajeUI();
		mensajeUI.setSolicitud(solicitud);
		
		Window wMensaje = new Window("Confirmación");
		wMensaje.addComponent(mensajeUI);
		wMensaje.setModal(true);
		wMensaje.setWidth("500px");
		wMensaje.setHeight("300px");
		
		getApplication().getMainWindow().addWindow(wMensaje);
			
	}

	private void asignarSolicitudDestino(Solicitud solicitud, Posicion pDestino) {
		Destino destino = new Destino();
		//destino.setSolicitud(solicitud);
		destino.setDestino(pDestino);
		destino.setTipo(pDestino.getTipo());	
		
		List<DetalleMoneda> detalleMonedas = new ArrayList<DetalleMoneda>();
		List<DetalleCasetera> detalleCaseteras = new ArrayList<DetalleCasetera>();
		destino.setDetalleMonedas(detalleMonedas);
		destino.setDetalleCaseteras(detalleCaseteras);
		if (TipoSolicitud.CODIGO.PEDIDO_DE_MATERIALES
				.equals(solicitud.getTipo().getCodigo())) 
		{
			
		} else if (TipoSolicitud.CODIGO.OTRO_SERVICIO.equals(solicitud.getTipo()
				.getCodigo())) 
		{

		} else if (TipoSolicitud.CODIGO.SERVICIO_POR_RUTA
				.equals(solicitud.getTipo().getCodigo()))
		{
			RegistrarSolicitudDetalleUI detalleUI = mapDestinos.get(pDestino);
			detalleUI.asignarDestino(destino);
			//destino.setDetalleMonedas(detalleUI.getDetalleDenominacion());			
		} else
		{
			//destino.setDetalleMonedas(detalleSolUI.getDetalleDenominacion());
			detalleSolUI.asignarDestino(destino);
		}

		solicitud.addDestino(destino);
	}

	private void buttonClickBtnAgregarDestino() {

		Posicion destino = cmbDestino.obtenerPosicion();

		if (destino != null) {
			// No permitimos Repetidos
			Collection<?> ids = containerDestino.getItemIds();
			for (Object itemId : ids) {
				Posicion dest = (Posicion) containerDestino.getItem(itemId)
						.getItemProperty(COLUMNA_DESTINO).getValue();
				if (dest.equals(destino)) {
					return;
				}
			}

			// Agregamos un nuevo Destino
			int index = containerDestino.size();
			Item item = containerDestino.addItem(index);

			item.getItemProperty(COLUMNA_DESTINO_NOMBRE).setValue(
					destino.getNombre());
			item.getItemProperty(COLUMNA_DESTINO_TIPO).setValue(
					destino.getTipo().getNombre());
			item.getItemProperty(COLUMNA_DESTINO).setValue(destino);
		}

	}

	@AutoGenerated
	private VerticalLayout buildMainLayout() {
		// common part: create layout
		mainLayout = new VerticalLayout();
		mainLayout.setImmediate(false);
		mainLayout.setWidth("100%");
		mainLayout.setHeight("100%");
		mainLayout.setMargin(false);
		mainLayout.setSpacing(true);
		
		// top-level component properties
		setWidth("100.0%");
		setHeight("100.0%");
		
		// lytCabecera
		lytCabecera = buildLytCabecera();
		mainLayout.addComponent(lytCabecera);
		
		// lytDetalles
		lytDetalles = new VerticalLayout();
		lytDetalles.setImmediate(false);
		lytDetalles.setWidth("100.0%");
		lytDetalles.setHeight("100.0%");
		lytDetalles.setMargin(false);
		mainLayout.addComponent(lytDetalles);
		mainLayout.setExpandRatio(lytDetalles, 1.0f);
		
		// lytBotones
		lytBotones = buildLytBotones();
		mainLayout.addComponent(lytBotones);
		mainLayout.setComponentAlignment(lytBotones, new Alignment(6));
		
		return mainLayout;
	}

	@AutoGenerated
	private VerticalLayout buildLytCabecera() {
		// common part: create layout
		lytCabecera = new VerticalLayout();
		lytCabecera.setImmediate(false);
		lytCabecera.setWidth("100.0%");
		lytCabecera.setHeight("-1px");
		lytCabecera.setMargin(false);
		lytCabecera.setSpacing(true);
		
		// lytControl1
		lytControl1 = buildLytControl1();
		lytCabecera.addComponent(lytControl1);
		
		// lytControl2
		lytControl2 = buildLytControl2();
		lytCabecera.addComponent(lytControl2);
		
		// lytControl3
		lytControl3 = buildLytControl3();
		lytCabecera.addComponent(lytControl3);
		
		// lytTransportadora
		lytTransportadora = buildLytTransportadora();
		lytCabecera.addComponent(lytTransportadora);
		
		// lytDestinos
		lytDestinos = buildLytDestinos();
		lytCabecera.addComponent(lytDestinos);
		
		return lytCabecera;
	}

	@AutoGenerated
	private HorizontalLayout buildLytControl1() {
		// common part: create layout
		lytControl1 = new HorizontalLayout();
		lytControl1.setImmediate(false);
		lytControl1.setWidth("-1px");
		lytControl1.setHeight("-1px");
		lytControl1.setMargin(false);
		lytControl1.setSpacing(true);
		
		// cmbTipoSolicitud
		cmbTipoSolicitud = new ComboBoxTipoSolicitud();
		cmbTipoSolicitud.setImmediate(false);
		cmbTipoSolicitud.setWidth("-1px");
		cmbTipoSolicitud.setHeight("-1px");
		lytControl1.addComponent(cmbTipoSolicitud);
		
		// pdfAtencion
		pdfAtencion = new PopupDateFieldFormat();
		pdfAtencion.setImmediate(true);
		pdfAtencion.setWidth("-1px");
		pdfAtencion.setHeight("-1px");
		pdfAtencion.setInvalidAllowed(false);
		lytControl1.addComponent(pdfAtencion);
		
		// imgNoProgramado
		imgNoProgramado = new Embedded();
		imgNoProgramado.setEnabled(false);
		imgNoProgramado.setImmediate(false);
		imgNoProgramado.setVisible(false);
		imgNoProgramado.setWidth("-1px");
		imgNoProgramado.setHeight("-1px");
		imgNoProgramado.setSource(new ThemeResource("img/admiracion.png"));
		imgNoProgramado.setType(1);
		lytControl1.addComponent(imgNoProgramado);
		
		// chkPatron
		chkPatron = new CheckBox();
		chkPatron.setCaption("Patrón de Calidad");
		chkPatron.setEnabled(true);
		chkPatron.setImmediate(false);
		chkPatron.setVisible(false);
		chkPatron.setWidth("-1px");
		chkPatron.setHeight("-1px");
		lytControl1.addComponent(chkPatron);
		
		// txtCotizacion
		txtCotizacion = new TextField();
		txtCotizacion.setEnabled(false);
		txtCotizacion.setImmediate(false);
		txtCotizacion.setVisible(false);
		txtCotizacion.setWidth("-1px");
		txtCotizacion.setHeight("-1px");
		lytControl1.addComponent(txtCotizacion);
		
		return lytControl1;
	}

	@AutoGenerated
	private HorizontalLayout buildLytControl2() {
		// common part: create layout
		lytControl2 = new HorizontalLayout();
		lytControl2.setImmediate(false);
		lytControl2.setWidth("400px");
		lytControl2.setHeight("-1px");
		lytControl2.setMargin(false);
		
		// txtReferencia
		txtReferencia = new TextField();
		txtReferencia.setImmediate(false);
		txtReferencia.setWidth("100.0%");
		txtReferencia.setHeight("-1px");
		lytControl2.addComponent(txtReferencia);
		
		return lytControl2;
	}

	@AutoGenerated
	private HorizontalLayout buildLytControl3() {
		// common part: create layout
		lytControl3 = new HorizontalLayout();
		lytControl3.setImmediate(false);
		lytControl3.setWidth("-1px");
		lytControl3.setHeight("-1px");
		lytControl3.setMargin(false);
		lytControl3.setSpacing(true);
		
		// cmbOrigen
		cmbOrigen = new ComboBoxPosicion();
		cmbOrigen.setImmediate(false);
		cmbOrigen.setWidth("200px");
		cmbOrigen.setHeight("-1px");
		lytControl3.addComponent(cmbOrigen);
		
		// cmbDestino
		cmbDestino = new ComboBoxPosicion();
		cmbDestino.setImmediate(false);
		cmbDestino.setWidth("200px");
		cmbDestino.setHeight("-1px");
		lytControl3.addComponent(cmbDestino);
		
		// btnAgregarDestino
		btnAgregarDestino = new Button();
		btnAgregarDestino.setCaption("Agregar");
		btnAgregarDestino.setImmediate(true);
		btnAgregarDestino.setVisible(false);
		btnAgregarDestino.setWidth("-1px");
		btnAgregarDestino.setHeight("-1px");
		lytControl3.addComponent(btnAgregarDestino);
		
		return lytControl3;
	}

	@AutoGenerated
	private HorizontalLayout buildLytTransportadora() {
		// common part: create layout
		lytTransportadora = new HorizontalLayout();
		lytTransportadora.setImmediate(false);
		lytTransportadora.setWidth("-1px");
		lytTransportadora.setHeight("-1px");
		lytTransportadora.setMargin(false);
		lytTransportadora.setSpacing(true);
		
		// lblEnviadoPor
		lblEnviadoPor = new Label();
		lblEnviadoPor.setImmediate(false);
		lblEnviadoPor.setWidth("-1px");
		lblEnviadoPor.setHeight("-1px");
		lblEnviadoPor.setValue("Enviado por");
		lytTransportadora.addComponent(lblEnviadoPor);
		
		// lblTransportadora
		lblTransportadora = new Label();
		lblTransportadora.setImmediate(false);
		lblTransportadora.setWidth("-1px");
		lblTransportadora.setHeight("-1px");
		lblTransportadora.setValue("Prosegur");
		lytTransportadora.addComponent(lblTransportadora);
		
		return lytTransportadora;
	}

	@AutoGenerated
	private HorizontalLayout buildLytDestinos() {
		// common part: create layout
		lytDestinos = new HorizontalLayout();
		lytDestinos.setImmediate(false);
		lytDestinos.setVisible(false);
		lytDestinos.setWidth("100.0%");
		lytDestinos.setHeight("-1px");
		lytDestinos.setMargin(false);
		
		// tblDestinos
		tblDestinos = new Table();
		tblDestinos.setImmediate(true);
		tblDestinos.setVisible(false);
		tblDestinos.setWidth("-1px");
		tblDestinos.setHeight("-1px");
		lytDestinos.addComponent(tblDestinos);
		
		// lytDestinoDatos
		lytDestinoDatos = new HorizontalLayout();
		lytDestinoDatos.setImmediate(false);
		lytDestinoDatos.setVisible(false);
		lytDestinoDatos.setWidth("-1px");
		lytDestinoDatos.setHeight("-1px");
		lytDestinoDatos.setMargin(false);
		lytDestinos.addComponent(lytDestinoDatos);
		
		return lytDestinos;
	}

	@AutoGenerated
	private HorizontalLayout buildLytBotones() {
		// common part: create layout
		lytBotones = new HorizontalLayout();
		lytBotones.setImmediate(false);
		lytBotones.setWidth("-1px");
		lytBotones.setHeight("-1px");
		lytBotones.setMargin(false);
		lytBotones.setSpacing(true);
		
		// btnCrear
		btnCrear = new ButtonAccion();
		btnCrear.setCaption("Crear");
		btnCrear.setImmediate(true);
		btnCrear.setWidth("-1px");
		btnCrear.setHeight("-1px");
		lytBotones.addComponent(btnCrear);
		
		// btnCancelar
		btnCancelar = new ButtonAccion();
		btnCancelar.setCaption("Cancelar");
		btnCancelar.setImmediate(true);
		btnCancelar.setWidth("-1px");
		btnCancelar.setHeight("-1px");
		lytBotones.addComponent(btnCancelar);
		
		return lytBotones;
	}

}
